Computer networks for use in a business environment continue to require more storage. Typically, such enterprises employ a centralized data storage system, and the computer network includes various personal computers, laptops, etc. that communicate over the network with the data storage system. The data storage system typically includes a server platform that controls the storage of information on and the retrieval of information from dedicated data storage resources, such as hard disk drives, magnetic or optical disks, and/or a storage area network (SAN). The server platform typically includes a storage controller that manages the physical disk drives and presents them to the server platform as logical units.
In one solution, the storage controller comprises a hardware implementation of the Redundant Array of Independent Disks (RAID) standard. RAID is a storage solution that provides storage reliability from lower-cost components via a technique of arranging the storage devices into arrays for redundancy. In general, the hardware RAID implementation employs dedicated hardware that divides and replicates data among multiple storage devices, but the array is seen by the server platform as one single disk. While this implementation provides a lower-cost option, the solution still requires the use of dedicated hardware that may be undesirably expensive in certain situations.
As processing power has increased, it has become more common to implement the storage controller in software rather than dedicated hardware. For example, currently there are a number of software RAID implementations in which the RAID logic is part of the operating system of the server platform. These solutions can significantly decrease overall cost and dependence on a specific hardware platform. However, software implementations have significant drawbacks in situations in which the server platform also supports multiple execution environments (e.g., multiple emulated operating systems) via virtualization.
Another significant limitation of software RAID implementations is that they need to be configured for each supported operating system, which may add cost and inconvenience to development, debugging, and deployment. In some cases, such as derivatives of Linux, there may be further complications related to the disclosure of source course code based on the terms of the open source licenses (e.g., GNU General Public License, and others). These open source compliance issues may further add to the cost and inconvenience of implementing software RAID for such operating systems.
Virtualization technology enables a single host computer running a virtual machine monitor (VMM) to present multiple abstractions or views of the host, so that the underlying host hardware appears as one or more independently operating virtual machines (VMs). The VMM comprises a host program that allows the host computer to support multiple execution environments. Each VM may function as a self-contained platform that runs its own firmware, operating system, and/or software applications. The VMM manages allocation and virtualization of host resources to the VMs.
When combining software RAID or other software storage controllers as a virtual storage appliance in a VMM environment, there is a meaningful configuration challenge. For example, there are several complexities involved in installing and/or booting the virtual storage appliance in the VMM environment. In order to boot, the virtual storage appliance is required to be present on the platform. There are many available VMM environments, although each one is different. Existing solutions must be independently designed for each VMM environment, and the platform must be pre-configured for the particular VMM environment to be used, which creates meaningful logistic challenges. Booting a standard operating system, for example, without any virtualization is quite simple, with the system (e.g., BIOS, EFI) loading only a few modules. Typically, in this scenario, a boot loader and driver may be loaded before the O/S loader takes over and controls the process. In a VMM environment, however, this process is significantly more complex because the system has to load from the boot load all of the VMM environments, the host operating systems, and the virtual storage appliance (and accompanying storage control logic). Loading all of these components may require an image having as much as 10-100 MB, or more. Furthermore, the boot device is typically a RAID volume and, therefore, if the RAID engine is in the operating system, a RAID function is required to load it, which may involve burdensome recursive self-references.
An existing solution for attempting to address this problem involves using a RAID loader in the boot code. However, this comes at the cost of having to create another RAID stack, which has its own complexities. While large manufacturers may be able to qualify and maintain a RAID stack in EFI/BIOS, many customers will either be unable or unwilling to do so. Another solution for attempting to address this problem involves providing the entire VMM environment in the server platform's non-volatile memory. This, too, introduces another set of challenges. For example, the size of the code for the VMM environment may problematic. Furthermore, there are significant business challenges associated with distribution and/or maintenance of the VMM environment when the entire VMM environment is provided in the server platform's non-volatile memory.
Despite the many advantages of combining a virtual storage appliance in a VMM environment, there remains a need in the art for more cost-effective solutions and systems and methods for installing and/or booting a virtual storage appliance in a standard server platform, which is independent of the particular VMM environment and which may eliminate the need for pre-configuring the platform.